package com.five.monkey.feign.provider.lock;

import java.util.concurrent.TimeUnit;

/**
 * @author 狻猊
 * @date 2021/10/9 10:49 上午
 */
public interface Lock {

    /**
     * 无限等待直到获得锁
     * @return true:加锁成功; false:加锁失败
     */
    boolean acquire();

    /**
     * 在time时间内没有获得锁，则认为加锁失败
     * @param time 加锁超时时间
     * @param unit 时间单位
     * @return true:加锁成功; false:加锁失败
     */
    boolean acquire(Long time, TimeUnit unit);

    /**
     * 获得锁失败即认为加锁失败，无需等待其他线程释放锁
     * @return true:加锁成功; false:加锁失败
     */
    boolean acquireNotWait();

    /**
     * 释放锁
     * @return true:释放锁成功; false:释放锁失败
     */
    boolean release();
}
